﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Globalization;

namespace Universitario.DAO
{
    public  class AlunoDAO
    {
        private DataClasses1DataContext dataContext;

        public AlunoDAO() {
            this.dataContext = new DataClasses1DataContext();
        }

        public AlunoDAO(DataClasses1DataContext dataContext) {
            this.dataContext = dataContext;
        }

        private static DataClasses1DataContext dc = new DataClasses1DataContext();
        private static UsuarioDAO usuarioDao = new UsuarioDAO();
        private static CursoGraduacaoDAO cursoDao = new CursoGraduacaoDAO();

        public static ArrayList erros
        {
            get;
            set;
        }

        /// <exception cref="ArgumentException">A exception é lançada quando algum campo do Usuário é inválido.</exception>
        public static void Insert(Aluno aluno)
        {
            erros = new ArrayList();

            // Campo universidade preenchido...
            if ( aluno.universidade.Length < 2 )
            {
                erros.Add(new KeyValuePair<String, String>("TxtUniversidade", "Universidade precisa ter no mínimo 2 letras."));
            }

            if (aluno.data_admissao == DateTime.MinValue)
            {
                erros.Add(new KeyValuePair<String, String>("TxtAdmissao", "Data de Admissão precisa ser válida."));
            }

            if ( ! UsuarioDAO.isValido(aluno.Usuario) )
            {
                erros.AddRange(UsuarioDAO.erros);
            }

            // Se houve algum erro, 'retorna' a lista de erros...
            if ( erros.Count != 0 )
            {
                throw new ArgumentException();
            }

            dc.Alunos.InsertOnSubmit(aluno);
            dc.SubmitChanges();

        }

        public static Aluno SelectById(long id)
        {
            var query = from aluno in dc.Alunos
                        where aluno.id == id
                        select aluno;

            return query.FirstOrDefault();
        }

        public static Aluno SelectByNome(String nome)
        {
            var query = from aluno in dc.Alunos
                        join usuario in dc.Usuarios
                        on aluno.usuario_id equals usuario.id
                        where usuario.nome == nome 
                        select aluno;

            return query.FirstOrDefault();
        }

        public static Aluno SelectByCPFSenha(String cpf, String senha)
        {
            var query = from aluno in dc.Alunos
                        join usuario in dc.Usuarios
                        on aluno.usuario_id equals usuario.id
                        where usuario.cpf == cpf
                        && usuario.senha == senha
                        select aluno;

            return query.FirstOrDefault();
        }

    }
}